<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!-- async await语法糖
		 async函数返回的是个promise对象
		 async用于声明一个方法是异步的，而await用于等待一个异步方法执行完成
		 -->
		 <!-- 
		  优缺点：
		  优点：
		  使异步代码看起来像同步代码，提高了代码的可读性和可维护性
		  简化了错误处理，异常可以在await表达式后面的代码中捕获try/catch
		  
		  缺点：
		  不能处理多个并发的异步操作
		  
		  -->
		<script>
			console.log("start");
			async function async1() {
			  //同步任务
			    console.log('async1 start');
			    await console.log('async1 end');
			}
			async1();
			console.log('end')
			
			/**
			 * script start
			 * async1 start
			 * promise1
			 * promise3
			 * script end
			 * promise2
			 * async1 end
			 * promise4
			 * setTimeout
			 * */ 
			 
			// async function async1() {
			//   //同步任务
			//     console.log('async1 start');
			//     await async2();
			//   //执行完async2()后才执行这里
			//     console.log('async1 end');
			// }
			// async function async2() {
			//     new Promise(function(resolve) {
			//     //同步任务
			//     console.log('promise1');
			//     resolve();
			// }).then(function() {
			//     //异步微任务
			//     console.log('promise2');
			//     });
			// }
			// //同步任务
			// console.log('script start');
			 
			// setTimeout(function() {
			//   //异步宏任务
			//     console.log('setTimeout');
			// }, 0)
			// //执行async1()
			// async1();
			 
			// new Promise(function(resolve) {
			//   //同步任务
			//     console.log('promise3');
			//     resolve();
			// }).then(function() {
			//   //异步微任务
			//     console.log('promise4');
			// });
			// //同步任务
			// console.log('script end');
			
			
			
			
			
			
			
			
			
			// async function fn() {
			// 	var num = num1;
			// }
			 
			// fn().then(value => { 
			//     console.log(value);
			//  }).catch((err) => {
			//     //  console.log('打印出错误');
			//      console.log(err)
			//  })
		</script>
	</body>
</html>